<?php
// 应用公共文件

use app\common\service\AuthService;
use think\facade\Cache;

if (!function_exists('__url')) {

    /**
     * 构建URL地址
     * @param string $url
     * @param array $vars
     * @param bool $suffix
     * @param bool $domain
     * @return string
     */
    function __url(string $url = '', array $vars = [], $suffix = true, $domain = false) {
        return url($url, $vars, $suffix, $domain)->build();
    }
}

if (!function_exists('password')) {

    /**
     * 密码加密算法
     * @param $value 需要加密的值
     * @param $type  加密类型，默认为md5 （md5, hash）
     * @return mixed
     */
    function password($value) {
        $value = sha1('blog_') . md5($value) . md5('_encrypt') . sha1($value);
        return sha1($value);
    }

}

if (!function_exists('xdebug')) {

    /**
     * debug调试
     * @param string|array $data 打印信息
     * @param string $type 类型
     * @param string $suffix 文件后缀名
     * @param bool $force
     * @param null $file
     */
    function xdebug($data, $type = 'xdebug', $suffix = NULL, $force = false, $file = NULL) {
        !is_dir(runtime_path() . 'xdebug/') && mkdir(runtime_path() . 'xdebug/');
        if (is_null($file)) {
            $file = is_null($suffix) ? runtime_path() . 'xdebug/' . date('Ymd') . '.txt' : runtime_path() . 'xdebug/' . date('Ymd') . "_{$suffix}" . '.txt';
        }
        file_put_contents($file, "[" . date('Y-m-d H:i:s') . "] " . "========================= {$type} ===========================" . PHP_EOL, FILE_APPEND);
        $str = ((is_string($data) ? $data : (is_array($data) || is_object($data))) ? print_r($data, true) : var_export($data, true)) . PHP_EOL;
        $force ? file_put_contents($file, $str) : file_put_contents($file, $str, FILE_APPEND);
    }
}

if (!function_exists('sysconfig')) {

    /**
     * 获取系统配置信息
     * @param $group
     * @param null $name
     * @return array|mixed
     */
    function sysconfig($group, $name = NULL) {
        $where = ['group' => $group];
        $value = empty($name) ? Cache::get("sysconfig_{$group}") : Cache::get("sysconfig_{$group}_{$name}");
        if (empty($value)) {
            if (!empty($name)) {
                $where['name'] = $name;
                $value         = \app\admin\model\SystemConfig::where($where)->value('value');
                Cache::tag('sysconfig')->set("sysconfig_{$group}_{$name}", $value, 3600);
            } else {
                $value = \app\admin\model\SystemConfig::where($where)->column('value', 'name');
                Cache::tag('sysconfig')->set("sysconfig_{$group}", $value, 3600);
            }
        }
        return $value;
    }
}

if (!function_exists('array_format_key')) {

    /**
     * 二位数组重新组合数据
     * @param $array
     * @param $key
     * @return array
     */
    function array_format_key($array, $key) {
        $newArray = [];
        foreach ($array as $vo) {
            $newArray[$vo[$key]] = $vo;
        }
        return $newArray;
    }

}

if (!function_exists('auth')) {

    /**
     * auth权限验证
     * @param $node
     * @return bool
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    function auth($node = NULL) {
        $authService = new AuthService(session('admin.id'));
        $check       = $authService->checkNode($node);
        return $check;
    }

}

if (!function_exists('get_order')) {
    /**
     * 生成随机订单号
     * @param $length
     * @param $name
     * @return string
     * User : Orange Tel: 181-3414-1353 QQ:1139552211
     * Date    : 2021/6/9 下午2:07
     */
    function get_order($length, $name) {
        $n = $length;

        //1、年月日
        $date = date('Ymd');
        //2、基于微秒生成随机串
        $id = uniqid();
        //3、截取随机串的随机后7位
        $sub = substr($id, 7, 13);
        //4、将随机串分割成数组
        $str_arr = str_split($sub, 1);
        //5、转换成ASCLL值,并取第一位连接成字符串
        $ascll_arr = array_map('ord', $str_arr);
        $ascll_str = implode('', $ascll_arr);
        //6、随机取连续的4位
        $max_start_index = strlen($ascll_str) - 1 - 4;
        $start_index     = rand(0, $max_start_index);
        $str             = substr($ascll_str, $start_index, 4);
        //7、生成末尾的n位随机数
        $rand = mt_rand('1' . str_repeat('0', $n - 1), str_repeat('9', $n));

        return $name . $date . $str . $rand;
    }
}

if (!function_exists('echo_info')) {
    /**
     * 输出信息
     */
    function echo_info() {
        $args = func_get_args();
        if (!empty($args)) {
            $function = \ClassLibrary\ClCache::getFunctionHistory(2);
            //日志
            $str = '[' . $function . ']' . call_user_func_array(['\ClassLibrary\ClString', 'toString'], $args);
            if (request()->isCli() || request()->isAjax()) {
                echo $str . "\n";
            } else {
                echo $str . '<br/>';
            }
        }
    }
}

if (!function_exists('get_someday_time')) {

    /**
     * 获取指定天数后的时间戳
     * @param $time
     * @return false|int
     * User : Orange Tel: 181-3414-1353 QQ:1139552211
     * Date    : 2021/6/9 下午5:02
     */
    function get_someday_time($time) {
        return strtotime(date('Y-m-d', strtotime("+" . $time . " day")));
    }
}

if (!function_exists('array_level')) {

    /**
     * 获取多维数组纬度
     * @param $arr
     * @return mixed
     * User : Orange Tel: 181-3414-1353 QQ:1139552211
     * Date    : 2021/6/9 下午5:32
     */
    function array_level($arr) {
        $al = [0];
        function aL($arr, &$al, $level = 0) {
            if (is_array($arr)) {
                $level++;
                $al[] = $level;
                foreach ($arr as $v) {
                    aL($v, $al, $level);
                }
            }
        }

        aL($arr, $al);
        return max($al);
    }
}

if (!function_exists('zt_pay_sign')) {

    /**
     * 获取ztPay的sign
     * @param $array
     * @return string
     * User : Orange Tel: 181-3414-1353 QQ:1139552211
     * Date    : 2021/6/11 上午11:09
     */
    function zt_pay_sign($array) {
        $app  = config('pay');
        $data = '';
        foreach ($array as $key => $value) {
            $data .= $key . '=' . $value . '&';
        }
        $data .= 'key=' . $app['app_secret'];
        return strtoupper(md5($data));
    }
}